import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JTextField;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JTextArea;
import javax.swing.JSplitPane;
import javax.swing.JList;
import javax.swing.JSeparator;
import javax.swing.ScrollPaneConstants;

public class VueConsultPeriodique extends Vue {
	private JPanel contentPane;
	private JTextField textFieldPremPageArticle;
	private JLabel lblSaisirIssn;
	private JButton btnAnnulerIssn;
	private JButton btnSelectionnerPeriodique;
	private JSplitPane splitPaneIssn;
	private JLabel lblSlectionnezUneParution;
	private JList listParution;
	private JScrollPane scrollPaneParution;
	private JButton btnAnnulerParution;
	private JButton btnSelectionnerParution;
	private JSplitPane splitPaneParution;
	private JLabel lblSlectionnezUnArticle;
	private JList listArticle;
	private JScrollPane scrollPaneArticle;
	private JButton btnAnnulerArticle;
	private JButton btnAfficherArticle;
	private JSplitPane splitPaneArticle;
	private JLabel labelPremPageArticle;
	private JLabel labelAuteur;
	private JTextArea textAreaAuteur;
	private JScrollPane scrollPaneAuteur;
	private JTextArea textAreaMot;
	private JLabel labelMot;
	private JScrollPane scrollPaneMot;
	private JButton btnQuitter;
	String issn, numeroParution;
	//vecteur de periodique pour la première liste de periodique
	Vector<String> vectPeriodiques= new Vector();
	// vecteur de parutions pour l'alimentation de la liste de parutions
	Vector<String> vectParutions= new Vector();
	// vecteur d'articles pour l'alimentation de la liste d'articles
	Vector<String> vectArticles= new Vector();
	private JList listPeriodique;
	private JScrollPane scrollPanePeriodique;
	
	public VueConsultPeriodique(Controleur controler) {
		super(controler);
		setTitle("Consulter un Periodique");
		setBounds(100, 100, 450, 700);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		lblSaisirIssn = new JLabel("Tappez l'issn de votre parution :");
		lblSaisirIssn.setBounds(12, 4, 418, 15);
		contentPane.add(lblSaisirIssn);
		
		splitPaneIssn = new JSplitPane();
		splitPaneIssn.setBounds(12, 112, 287, 27);
		contentPane.add(splitPaneIssn);
		
		btnAnnulerIssn = new JButton("Annuler");
		btnAnnulerIssn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				getControleur().fermerVue(VueConsultPeriodique.this);
			}
		});
		splitPaneIssn.setLeftComponent(btnAnnulerIssn);
		
		btnSelectionnerPeriodique = new JButton("Sélectionner Periodique");
		splitPaneIssn.setRightComponent(btnSelectionnerPeriodique);
		btnSelectionnerPeriodique.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{	
				if (listPeriodique.isSelectionEmpty()){
					Message dialog = new Message("Sélectionnez un périodique à consulter dans la liste.");
					dialog.setVisible(true);
				}
				else{
				setEtat(inter1);
				issn=(String)listPeriodique.getSelectedValue();
			    getControleur().alimenteListParution(issn);
				}
			}
		});
		
		lblSlectionnezUneParution = new JLabel("Sélectionnez une Parution :");
		lblSlectionnezUneParution.setBounds(10, 150, 418, 15);
		contentPane.add(lblSlectionnezUneParution);
		
		scrollPaneParution = new JScrollPane();
		scrollPaneParution.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneParution.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneParution.setBounds(12, 170, 418, 80);
		contentPane.add(scrollPaneParution);
		
		listParution = new JList();
		scrollPaneParution.setViewportView(listParution);
		
		splitPaneParution = new JSplitPane();
		splitPaneParution.setBounds(12, 260, 287, 27);
		contentPane.add(splitPaneParution);
		
		btnAnnulerParution = new JButton("Annuler");
		splitPaneParution.setLeftComponent(btnAnnulerParution);
		btnAnnulerParution.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				viderListParution();
			}
		});
		
		btnSelectionnerParution = new JButton("Sélectionner Parution");
		splitPaneParution.setRightComponent(btnSelectionnerParution);
		btnSelectionnerParution.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				if (listParution.isSelectionEmpty()){
					Message dialog = new Message("Vous devez sélectionner une parution");
					dialog.setVisible(true);
				}
				else
				{
					numeroParution=(String)listParution.getSelectedValue();
					getControleur().alimenteListArticle(issn, numeroParution);
					setEtat(inter2);	
				}
			}
		});
		
		lblSlectionnezUnArticle = new JLabel("Sélectionnez un Article :");
		lblSlectionnezUnArticle.setBounds(10, 300, 193, 15);
		contentPane.add(lblSlectionnezUnArticle);
		
		scrollPaneArticle = new JScrollPane();
		scrollPaneArticle.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneArticle.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneArticle.setBounds(12, 320, 418, 80);
		contentPane.add(scrollPaneArticle);
		
		listArticle = new JList();
		scrollPaneArticle.setViewportView(listArticle);
		
		labelPremPageArticle = new JLabel("Première Page :");
		labelPremPageArticle.setBounds(12, 449, 141, 15);
		contentPane.add(labelPremPageArticle);
		
		textFieldPremPageArticle = new JTextField();
		textFieldPremPageArticle.setColumns(10);
		textFieldPremPageArticle.setBounds(150, 449, 114, 19);
		contentPane.add(textFieldPremPageArticle);
		
		labelAuteur = new JLabel("Auteurs :");
		labelAuteur.setBounds(12, 474, 200, 15);
		contentPane.add(labelAuteur);
		
		scrollPaneAuteur = new JScrollPane();
		scrollPaneAuteur.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneAuteur.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneAuteur.setBounds(12, 500, 200, 135);
		contentPane.add(scrollPaneAuteur);
		
		textAreaAuteur = new JTextArea();
		scrollPaneAuteur.setViewportView(textAreaAuteur);
		
		scrollPaneMot = new JScrollPane();
		scrollPaneMot.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPaneMot.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPaneMot.setBounds(228, 500, 200, 135);
		contentPane.add(scrollPaneMot);
		
		textAreaMot = new JTextArea();
		scrollPaneMot.setViewportView(textAreaMot);
		
		labelMot = new JLabel("MotCles :");
		labelMot.setBounds(228, 474, 202, 15);
		contentPane.add(labelMot);
		
		btnQuitter = new JButton("Quitter");
		btnQuitter.setBounds(12, 640, 107, 25);
		contentPane.add(btnQuitter);
		btnQuitter.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) 
			{
				getControleur().fermerVue(VueConsultPeriodique.this);
			}
		});
		
		splitPaneArticle = new JSplitPane();
		splitPaneArticle.setBounds(12, 410, 252, 27);
		contentPane.add(splitPaneArticle);
		
		btnAfficherArticle = new JButton("Afficher");
		splitPaneArticle.setRightComponent(btnAfficherArticle);
		btnAfficherArticle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				System.out.println("################################");
				if (listArticle.isSelectionEmpty()){
					Message dialog = new Message("Sélectionnez un article à consulter dans la liste.");
					dialog.setVisible(true);
				}
				else{
					viderInfos();
					setEtat(inter1);
					String titre = (String)listArticle.getSelectedValue();
					getControleur().alimenteInfosArticle(issn, numeroParution, titre);
					setEtat(finale);					
				}

			}
		});
		
		btnAnnulerArticle = new JButton("Annuler");
		splitPaneArticle.setLeftComponent(btnAnnulerArticle);	
		btnAnnulerArticle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) 
			{
				viderListArticle();
				viderInfos();
			}
		});
		
		scrollPanePeriodique = new JScrollPane();
		scrollPanePeriodique.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		scrollPanePeriodique.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		scrollPanePeriodique.setBounds(12, 25, 418, 80);
		contentPane.add(scrollPanePeriodique);
		
		HashMap<String, Periodique> periodiques;
		periodiques= new HashMap<String, Periodique>();
		periodiques=getControleur().rechPeriodiques();
		if (periodiques.isEmpty()){
			Message dialog = new Message("Il n'y a pas de parutions a consulter.");
			dialog.setVisible(true);
			listPeriodique = new JList();
		}
		else{
			listPeriodique = new JList();
			scrollPanePeriodique.setViewportView(listPeriodique);
			for (Periodique p : periodiques.values()){
				vectPeriodiques.addElement(p.getIssn());
				listPeriodique.setListData(vectPeriodiques);
			}
		}
	}
	
	public void alimente(Parution p){
		vectParutions.add(String.valueOf(p.getNumero()));
		listParution.setListData(vectParutions);
	}
	
	public void alimente(Article art){
		vectArticles.add(String.valueOf(art.getTitre()));
		listArticle.setListData(vectArticles);
	}
	
	public void alimenteNumPage(String numero){
		System.out.print("numero :" + numero + "\n");
		textFieldPremPageArticle.setText(numero);
	}
		
	public void alimenteMotCles(String mot){
		String text = textAreaMot.getText();
		text = text + "\n" + mot;
		System.out.print("Mot :");
		System.out.println(text);
		textAreaMot.setText(text);
	}
	
	public void alimenteAuteurs(String nom, String prenom){
		String text = textAreaAuteur.getText();
		text = text + "\n" + nom + " " + prenom;
		System.out.print("Auteur :");
		System.out.println(text);
		textAreaAuteur.setText(text);
	}
	
	public void viderListArticle(){
		listArticle.removeAll();
		vectArticles.clear();
		setEtat(inter1);
	}
	
	public void viderListParution(){
		listParution.removeAll();
		vectParutions.clear();
		setEtat(initiale);
	}
	
	public void viderInfos(){
		textAreaAuteur.setText("");
		textAreaMot.setText("");
		setEtat(inter1);
	}
	
	public void setEtat(int etat){
		switch (etat){
			case initiale: {
				//-----------------------------------------
				lblSaisirIssn.setEnabled(true);
				listPeriodique.setEnabled(true);
				splitPaneIssn.setEnabled(true);
				btnAnnulerIssn.setEnabled(true);
				btnSelectionnerPeriodique.setEnabled(true);
				//------------------------------------------
				lblSlectionnezUneParution.setEnabled(false);
				listParution.setEnabled(false);
				scrollPaneParution.setEnabled(false);
				btnAnnulerParution.setEnabled(false);
				btnSelectionnerParution.setEnabled(false);
				splitPaneParution.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUnArticle.setEnabled(false);
				scrollPaneArticle.setEnabled(false);
				listArticle.setEnabled(false);
				splitPaneArticle.setEnabled(false);
				btnAnnulerArticle.setEnabled(false);
				btnAfficherArticle.setEnabled(false);
				//------------------------------------------
				textFieldPremPageArticle.setEnabled(false);
				labelPremPageArticle.setEnabled(false);
				labelAuteur.setEnabled(false);
				textAreaAuteur.setEnabled(false);
				scrollPaneAuteur.setEnabled(false);
				textAreaMot.setEnabled(false);
				labelMot.setEnabled(false);
				scrollPaneMot.setEnabled(false);
				//------------------------------------------
				btnQuitter.setEnabled(true);
				break;
			}
			case inter1: {
				//-----------------------------------------
				lblSaisirIssn.setEnabled(false);
				listPeriodique.setEnabled(false);
				splitPaneIssn.setEnabled(false);
				btnAnnulerIssn.setEnabled(false);
				btnSelectionnerPeriodique.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUneParution.setEnabled(true);
				listParution.setEnabled(true);
				scrollPaneParution.setEnabled(true);
				btnAnnulerParution.setEnabled(true);
				btnSelectionnerParution.setEnabled(true);
				splitPaneParution.setEnabled(true);
				//------------------------------------------
				lblSlectionnezUnArticle.setEnabled(false);
				scrollPaneArticle.setEnabled(false);
				listArticle.setEnabled(false);
				splitPaneArticle.setEnabled(false);
				btnAnnulerArticle.setEnabled(false);
				btnAfficherArticle.setEnabled(false);
				//------------------------------------------
				textFieldPremPageArticle.setEnabled(false);
				labelPremPageArticle.setEnabled(false);
				labelAuteur.setEnabled(false);
				textAreaAuteur.setEnabled(false);
				scrollPaneAuteur.setEnabled(false);
				textAreaMot.setEnabled(false);
				labelMot.setEnabled(false);
				scrollPaneMot.setEnabled(false);
				//------------------------------------------
				btnQuitter.setEnabled(true);
				break;
			}
			case inter2: {
				//-----------------------------------------
				lblSaisirIssn.setEnabled(false);
				listPeriodique.setEnabled(false);
				splitPaneIssn.setEnabled(false);
				btnAnnulerIssn.setEnabled(false);
				btnSelectionnerPeriodique.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUneParution.setEnabled(false);
				listParution.setEnabled(false);
				scrollPaneParution.setEnabled(false);
				btnAnnulerParution.setEnabled(false);
				btnSelectionnerParution.setEnabled(false);
				splitPaneParution.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUnArticle.setEnabled(true);
				scrollPaneArticle.setEnabled(true);
				listArticle.setEnabled(true);
				splitPaneArticle.setEnabled(true);
				btnAnnulerArticle.setEnabled(true);
				btnAfficherArticle.setEnabled(true);
				//------------------------------------------
				textFieldPremPageArticle.setEnabled(false);
				labelPremPageArticle.setEnabled(false);
				labelAuteur.setEnabled(false);
				textAreaAuteur.setEnabled(false);
				scrollPaneAuteur.setEnabled(false);
				textAreaMot.setEnabled(false);
				labelMot.setEnabled(false);
				scrollPaneMot.setEnabled(false);
				//------------------------------------------
				btnQuitter.setEnabled(true);
				break;
			}
			case finale: {
				//-----------------------------------------
				lblSaisirIssn.setEnabled(false);
				listPeriodique.setEnabled(false);
				splitPaneIssn.setEnabled(false);
				btnAnnulerIssn.setEnabled(false);
				btnSelectionnerPeriodique.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUneParution.setEnabled(false);
				listParution.setEnabled(false);
				scrollPaneParution.setEnabled(false);
				btnAnnulerParution.setEnabled(false);
				btnSelectionnerParution.setEnabled(false);
				splitPaneParution.setEnabled(false);
				//------------------------------------------
				lblSlectionnezUnArticle.setEnabled(true);
				scrollPaneArticle.setEnabled(true);
				listArticle.setEnabled(true);
				splitPaneArticle.setEnabled(true);
				btnAnnulerArticle.setEnabled(true);
				btnAfficherArticle.setEnabled(true);
				//------------------------------------------
				textFieldPremPageArticle.setEnabled(true);
				labelPremPageArticle.setEnabled(true);
				labelAuteur.setEnabled(true);
				textAreaAuteur.setEnabled(true);
				scrollPaneAuteur.setEnabled(true);
				textAreaMot.setEnabled(true);
				labelMot.setEnabled(true);
				scrollPaneMot.setEnabled(true);
				//------------------------------------------
				btnQuitter.setEnabled(true);
				break;
			}
		}
	}
}
